// ===================== 面向详细注释 =====================
// config.h 声明了 Config 配置类，用于管理和生成设备的各种配置命令。
// 包括 NMEA、RTCM、基准站、移动站、陀螺计、加速度计、TCP、MQTT、NTRIP 等参数的设置和查询。
// 每个成员变量和函数都加了详细注释，便于理解。
// ==============================================================

#ifndef CONFIG_H
#define CONFIG_H

#include <QString>   // Qt 字符串类型
#include <QList>     // Qt 列表类型

// Config 类：负责保存和生成所有设备配置相关的命令
class Config
{
public:
    Config(); // 构造函数，初始化所有参数

    // ===================== 静态命令生成函数 =====================
    // 进入设置模式命令
    static QString enterConfigMode();
    // 退出设置模式命令
    static QString exitConfigMode();
    // 保存配置命令
    static QString saveConfig();

    // ===================== 配置参数设置函数 =====================
    // 设置 NMEA 配置
    void setNmeaConfig(int msgId, double rate);
    // 设置 RTCM 配置
    void setRtcmConfig(int msgType, double rate);
    // 设置基准站配置
    void setBaseStationConfig(bool isAuto, double lat, double lon, double height);
    // 设置为移动站
    void setMobileStation();
    // 设置陀螺计配置
    void setGyroConfig(double rate);
    // 设置加速度计配置
    void setAccelConfig(double rate);
    // 设置 TCP 配置
    void setTcpConfig(const QString &ip, int port, const QString &deviceId);
    // 设置 MQTT 配置
    void setMqttConfig(const QString &ip, int port, const QString &deviceId, const QString &username, const QString &password);
    // 设置 NTRIP 配置
    void setNtripConfig(const QString &ip, int port, const QString &mountPoint, const QString &username, const QString &password);

    // ===================== 查询命令生成函数 =====================
    // 查询当前模式
    static QString queryMode();
    // 查询 TCP 配置
    static QString queryTcpConfig();
    // 查询 MQTT 配置
    static QString queryMqttConfig();
    // 查询陀螺计配置
    static QString queryGyroConfig();
    // 查询加速度计配置
    static QString queryAccelConfig();
    // 查询 NTRIP 配置
    static QString queryNtripConfig();

    // ===================== 生成所有配置命令 =====================
    // 根据当前参数生成所有需要下发的配置命令列表
    QList<QString> generateCommands() const;

private:
    // ========== 配置参数 ========== 
    int nmeaMsgId;         // NMEA 消息 ID
    double nmeaRate;       // NMEA 输出频率

    int rtcmMsgType;       // RTCM 消息类型
    double rtcmRate;       // RTCM 输出频率

    bool baseStationIsAuto;    // 基准站是否为自动模式
    double baseStationLat;     // 基准站纬度
    double baseStationLon;     // 基准站经度
    double baseStationHeight;  // 基准站高度
    bool isMobileStation;      // 是否为移动站

    double gyroRate;       // 陀螺计输出频率
    double accelRate;      // 加速度计输出频率

    QString tcpIp;         // TCP 服务器 IP
    int tcpPort;           // TCP 端口
    QString tcpDeviceId;   // TCP 设备 ID

    QString mqttIp;        // MQTT 服务器 IP
    int mqttPort;          // MQTT 端口
    QString mqttDeviceId;  // MQTT 设备 ID
    QString mqttUsername;  // MQTT 用户名
    QString mqttPassword;  // MQTT 密码

    QString ntripIp;           // NTRIP 服务器 IP
    int ntripPort;             // NTRIP 端口
    QString ntripMountPoint;   // NTRIP 挂载点
    QString ntripUsername;     // NTRIP 用户名
    QString ntripPassword;     // NTRIP 密码
};

#endif // CONFIG_H